package com.sourcetrip.raw.adt.interfaces;

/**
 * @author: ZhouBert
 * @date: 2020/11/17
 * @description:	链表的接口
 */
public interface MyLinkedListInterfaces<E> {

	int ELEMENT_NOT_FOUND = -1;

	/**
	 * 链表中 元素（node）的数量
	 * @return
	 */
	int size();

	/**
	 * 链表 是否为空链表
	 * @return
	 */
	boolean isEmpty();

	/**
	 * 判断是否包含元素
	 * @param element
	 * @return
	 */
	boolean contains(E element);

	/**
	 * 将元素添加到末尾
	 */
	void add(E element);

	/**
	 * 在指定位置添加对应元素
	 * @param index
	 * @param element
	 */
	void add(int index, E element);

	/**
	 * 从指定位置获取对应元素
	 * @param index
	 * @return
	 */
	E get(int index);

	/**
	 * 从指定位置获取元素
	 * @param index
	 * @param element
	 * @return	oldValue
	 */
	E set(int index, E element);

	/**
	 * 从指定位置移除元素
	 * @param index
	 * @return	oldValue
	 */
	E remove(int index);

	/**
	 * 判断元素位于第几个索引的位置
	 * 如果不存在-> 返回 -1
	 * @param element
	 * @return
	 */
	int indexOf(E element);

	/**
	 * 清空链表
	 */
	void clear();

	/**
	 * 
	 * @return
	 */
	String toString();
}
